// 泛型在类和接口中的使用
// class Queue {
//   private data = [];
//   push(item){
//     return this.data.push(item)
//   }
//   pop(){
//     return this.data.shift()
//   }
// }
// const queue = new Queue()
// queue.push(1)
// queue.push("str")
// console.log(queue.pop().toFixed())
// console.log(queue.pop().toFixed())

interface IQueue<T> {
  push(item: T): void
  pop(): T | undefined
}
class Queue<T> implements IQueue<T> {
  private data: T[] = [];
  push(item: T) {
    return this.data.push(item)
  }
  pop(): T | undefined {
    return this.data.shift()
  }
}
const queue = new Queue<number>()
queue.push(1)
queue.push(2)
console.log(queue.pop()?.toFixed())


interface KeyPair<N, V> {
  key: N
  value: V
}

let kp1: KeyPair<number, string> = { key: 1, value: "string" }
let kp2: KeyPair<string, number> = { key: "string", value: 12 }

// let arr: number[] = [1,2,3]
let arr: Array<number> = [1, 2]